<?php

class Lib_Tool
{

    private static $pre_fix = 'check_scene_';

    /**
     * 过滤SPAM垃圾短信
     * @param $scene
     * @param $mobile
     * @return bool|int
     */
    public static function check_spam($scene, $mobile)
    {
        //验证发送短信间隔时间 10秒
        $key = self::$pre_fix . $scene . '_mobile_' . $mobile;
        $value = Func_Cachefunc::getInstance()->get($key);
        if ($value) {
            return 5502;
        }

        //验证发送次数，每天限制10条
        $res = Func_Redisfunc::getInstance()->checkceiling('sms', $mobile, 20);
        if ($res === false) {
            return 5501;
        }
        Func_Cachefunc::getInstance()->set($key, time(), 10);

        return true;

    }

    /**
     * 验证QPS
     * @return bool|int
     */
    public static function check_QPS()
    {
        if(PHP_SAPI === 'cli'){
            return true;
        }
        //验证发送短信间隔时间 1秒
        $key = self::$pre_fix . "QPS";
        //获取当前吞吐量
        $num = Lib_Redis_String::get($key);
        if($num > 20){
            return 5505;
        }
        $obj = new Lib_Redis_String;
        if(!$num){
            $obj->setex($key, 1, 1);

        }else{
            $obj->incr($key);
        }
        unset($obj);
        return true;

    }

    /**
     * 手机黑名单校验
     * @param $mobile
     * @return bool|int
     */
    public static function check_black($mobile)
    {
        $black_mobile = Lib_SMS_Config::$black_mobile;
        if (in_array($mobile, $black_mobile)) {
            return 5503;
        }
        return true;
    }

    /**
     * 防止同一ip刷接口
     * @param $app
     * @param $scene
     * @return bool
     */
    public static function check_ip($app, $scene){
        if(!$app || !$scene) return false;
        $ip = Lib_Function::getInstance()->getip();
        if(!$ip) return false;
        //验证发送短信间隔时间 60秒
        $key = self::$pre_fix. $scene.'_app_'.$app . '_ip_' . $ip;
        $value = Func_Cachefunc::getInstance()->get($key);
        if ($value) {
            return false;
        }
        //验证发送次数，每天限制100条
        $res = Func_Redisfunc::getInstance()->checkceiling($app.'_'.$scene, $ip, 100);
        if ($res === false) {
            return false;
        }
        Func_Cachefunc::getInstance()->set($key, time(), 5);
        return true;
    }

}